home *** CD-ROM | disk | FTP | other *** search
/ PC-SIG: World of Utilities / PC-SIG's World of Utilities (PC-SIG) (1994).iso / UTI / DISK1533.ZIP / TEE.C < prev    next >
Text File  |  1989-02-22  |  2KB  |  94 lines

  1. /* TEE - UNIX filter --  it takes one parm, output filename, and output  */
  2. /* is directed to standard output, and the output file named in the cmd  */
  3. /* line.                                                                 */
  4.  
  5. #include <stdio.h>
  6. #include <fcntl.h>
  7. #include <stat.h>
  8.  
  9. #define    TRUE    1
  10. #define    FALSE    0
  11. #define LINESIZE BUFSIZ
  12.  
  13. static    char    OBufr[BUFSIZ];        /* output file buffer required    */
  14.  
  15. static    char    *Program[]    = { "S. Leoce    *NIX(tm) TEE filter"
  16.                     "V1.0 R1.0 SVCLVL 0 - VA @PSJ  "};
  17.  
  18. #include "b:cmdline.c"
  19.  
  20. main (argc, argv)
  21. int argc;
  22. char *argv[];
  23.  
  24. {
  25.     short unsigned int LineOption = FALSE;
  26.  
  27.     FILE  *OFile;
  28.     int   OF_Hndl;        /* file handle */
  29.  
  30.     static char *usage = "usage: tee [/ahiv] file [< stdin] [> stdout]";
  31.  
  32.     long unsigned register int lines = 0;
  33.     auto char line [LINESIZE];
  34.  
  35.     auto short append = FALSE;    /* default options processing */
  36.     auto short count  = FALSE;
  37.     auto short header = FALSE;    
  38.  
  39.     if (argc < 2) {
  40.         fprintf(stderr,"%s\n",usage);
  41.         _exit (0x10);
  42.     }
  43.  
  44.       opterr = FALSE;
  45.     while ((LineOption = getopt(argc, argv, "ahiv")) != EOF)
  46.         switch (LineOption)    {
  47.             case '?':
  48.                 fprintf(stderr,"tee: illegal option\n");
  49.                 _exit(0x04);
  50.             case 'i':
  51.                 fprintf(stderr,"tee: i unsupported in DOS\n");
  52.                 break;
  53.             case 'a':
  54.                 append = TRUE;
  55.                 break;
  56.             case 'v':
  57.                 count  = TRUE;
  58.                 break;
  59.             case 'h':
  60.                 header = TRUE;
  61.                 break;
  62.         }
  63.  
  64.     if (argv[optind] == NULL) {
  65.         fprintf(stderr, "%s\n",usage);
  66.         _exit (0x10);
  67.     }
  68.     if (append) {
  69.         if ((OFile = fopen(argv[optind], "a")) == NULL)
  70.             _exit(perror(strcat("Can't open ",strupr(argv[optind]))));
  71.     }
  72.     else {
  73.         if ((OF_Hndl = creat(argv[optind],O_TEXT|S_IWRITE|S_IREAD)) == -1)
  74.             _exit(perror(strcat("Can't create ",strupr(argv[optind]))));
  75.                
  76.                if ((OFile = fdopen(OF_Hndl, "w")) == NULL)
  77.                    _exit(perror("Can't connect device "));
  78.     }
  79.     while (fgets(line, LINESIZE, stdin) != NULL) {
  80.         fprintf (OFile, "%s", line);
  81.         printf ("%s", line);
  82.  
  83.         lines++;
  84.     }
  85.     if (header)
  86.         fprintf(OFile,"\n/*EOF %7ld RCD\n", lines);
  87.  
  88.     fflush (OFile);
  89.     fclose (OFile);
  90.     if (count)
  91.         fprintf(stderr, "tee: processed lines %7ld\n", lines);
  92.  
  93.     _exit (0);
  94. }